package com.baizhi.cmfz.realm;

import com.baizhi.cmfz.dao.AdminDao;
import com.baizhi.cmfz.entity.Admin;
import org.apache.shiro.authc.*;
import org.apache.shiro.realm.AuthenticatingRealm;
import org.springframework.beans.factory.annotation.Autowired;

/**
 *因为shiro默认的是取ini文件中获取正确的验证信息（看源码知道的）
 * 所以想要让他去数据库中查询出正确的验证信息，需要自己写一个领域继承AuthenticatingRealm
 */
public class DatabaseRealm extends AuthenticatingRealm {
    //装配一个adminDao
    @Autowired(required = false)
    private AdminDao adminDao;
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //从token中获取用户名
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        String username = token.getUsername();
        //去数据库中根据用户名获取对象
        Admin admin = adminDao.selectOneAdmin(username);
        //当他不等于null时 说明查询出来了对象，封装为info
        if (admin != null) {
            //返回一个AuthenticationInfo的实现类对象
            //三个参数，第一个参数是u数据库中的username，第二个参数是数据库中的password
            //第三个参数是当前类名
            return new SimpleAuthenticationInfo(admin.getUsername(),admin.getPassword(),this.getName());
        }
        return null;
    }
}

/**
 * 写一个去数据库查询的验证领域，因为shiro默认的是在ini文件中获取验证信息(源码中看的）
 * 继承一个AuthenticatingRealm
 */
/*class TestRealm extends AuthenticatingRealm{
    @Autowired(required = false)
    private AdminDao adminDao;
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //1 获取taken 获取存到taken中的username属性值
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        String username = token.getUsername();
        //根据username去数据库中查询
        Admin admin = adminDao.selectOneAdmin(username);
        //判断是不是存在对象 如果对象存在，封装验证信息Info
        if (admin != null) {
            return new SimpleAuthenticationInfo(admin.getUsername(),admin.getPassword(),this.getName());
        }
        return null;
    }
}*/
